#include <stdio.h>
#include <unistd.h>
#include <string.h>
#ifndef WIN32
#include <ncurses.h>
#else
#include <ncurses.h>
#endif

#include "jeu.h"

void ncursAff( WINDOW* win, const plateauDeJeu &tetris)
{
    curs_set(0);
	wclear(win);
	int x,y;

	const Terrain& ter2 = jeuGetTerrain(tetris); //recupere la structure qui contient tableau piece posees

	int piec = jeuGetPiece_courante(tetris);//recupere la piece courante
	int rotation = jeuGetRotation(tetris);
	int x2, y2;
	for(y=0 ; y<=YMAX-1 ; y++)
	{
		for(x=0 ; x<=XMAX-1 ; x++)
		{
				if(terGetXY(ter2,y,x)!='0' && terGetXY(ter2,y,x)!='*') // si c'est un caractere d'une piece
				{
				    mvwprintw(win, y, x, "%c", terGetXY(ter2,y,x));
                }
                x2 = x - jeuGetPosX(tetris);
                y2 = y - jeuGetPosY(tetris);
				if (x2 >= 0 && x2 < 4 && y2 >= 0 && y2<4
				   && (SPiece[piec][rotation][y2*4+x2]!='0')
                      && y>=4)  // si c'est un caractere different de '0'
				{
					mvwprintw(win, y, x, "%c", SPiece[piec][rotation][y2*4+x2]);
				}
		}
	}
	for(y=0 ; y<4 ; ++y)
	{
		for(x=0 ; x<4 ; ++x)
		{
		    if((SPiece[jeuGetPiece_suivante(tetris)][1][y*4+x]!='0'))
                {mvwprintw(win, y, x+26, "%c",
                           SPiece[jeuGetPiece_suivante(tetris)][1][y*4+x]);}
		}
	}
//rajoute a gauche du jeu différents textes
	char soustitre[]="Piece suivante";
	char niveau[]="Niveau : ";
	char nbLigne[]="Ligne : ";
	char nbScore[]="Score : ";

    mvwprintw(win,5,26,"%s",soustitre);
    mvwprintw(win,8,14,"%s",niveau);
    mvwprintw(win,8,23,"%d",tetris.Score.niveau);
    mvwprintw(win,10,14,"%s",nbScore);
    mvwprintw(win,10,23,"%d",tetris.Score.nbrScore);
	mvwprintw(win,12,14,"%s",nbLigne);
	mvwprintw(win,12,23,"%d",tetris.Score.nbreLigne);

}

void ncursBoucle(plateauDeJeu &jeu)
{
	WINDOW *win;
	int c;
	bool ok;

	initscr();		// passe l'écran texte en mode NCurses
	clear();		// efface l'écran
	noecho();  	//Lorsqu'une touche est préssée au clavier, elle n'apparait pasa à l'écran
	cbreak();		// un caractère est directement affiché, il ne passe pas dans un buffer

	// Creation d'une nouvelle fenetre en mode texte
	// => fenetre de dimension et position ( WIDTH, HEIGHT, STARTX,STARTY)
	win = newwin( 35, 100, 0, 1 );
	keypad(win, TRUE);		// pour que les flèches soient traitées (il faut le faire après création de la fenêtre)
    nodelay(win, true);

	ok = true;
	do
	{
		ncursAff( win, jeu);
		c = wgetch(win);
		switch(c)
		{
			case KEY_LEFT:
				jeuActionClavier( jeu, 'g');
				break;
			case KEY_RIGHT:
				jeuActionClavier( jeu, 'd');
				break;
			case KEY_UP:
				jeuActionClavier( jeu, 'r');
				break;
			case KEY_DOWN:
				jeuActionClavier( jeu, 't');
				break;
           default:
                sleep(1);
                break;
        }
		descentePiece(jeu);
		if(jeu.finJeu)
		{
            ok = false;
        }
	} while(ok);

	endwin();
}

